/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logica;

/**
 *
 * @author Elias Mendoza
 * Modulo de procesamiento de los datos recividos del puerto serial
 */
import java.io.*;
import java.util.*;
import javax.comm.*;
public class RecibeDatos {
    public GrupoSensores objgrupo;
    public String dato;
    public boolean correcto = false;
    public String caracteres_validos = "ABCDEFGHI1234567890.-Sp*";
    public String grupos_sen = "ABCD";
    public String valores_num = "0123456789.";
    public int contax = 0;
    //Declaracion y creacion de ArrayList que guardara los datos leidos del sensor
    //Vaciandolos en un objeto GrupoSensores
    public ArrayList<GrupoSensores> sensores = new ArrayList<GrupoSensores>();
    public int grupo;//variable que almacena el ID del grupo de sensor
    //valores de humedad de los cuatro sensores que conforman un grupo
    String vsensor1 = "";
    String vsensor2 = "";
    String vsensor3 = "";
    String vsensor4 = "";
    String val_ref = "";//valor  de referecia de humedad
    String val_sta = "";//valor  del estado de la valvula
    String val_dn = "";//valor de dia o noche

    public RecibeDatos(CommPortIdentifier idPuerto) {
        new ReadPort(idPuerto,this);
    }
    public void recibeLectura(String cad) {
        int posicion = 0;
            posicion = caracteres_validos.indexOf(cad);
            if (posicion > -1) {
                if (cad.equals("-")) {
                    contax++;
                }
                System.out.println("El caracter es valido: " + cad);
                correcto = true;
            } else {
                System.out.println("El caracter no fue valido: " + cad);
                correcto = false;
            }
            //Determina que a que grupo de sensores pertenece la lectura
            if (grupos_sen.indexOf(cad) > -1 && correcto == true) {
                objgrupo = new GrupoSensores();
                objgrupo.setGrupo(cad);
                grupo = grupos_sen.indexOf(cad);
                System.out.println("Grupo: " + grupo + "--" + objgrupo.getGrupo());
            }
            //comenzar a concatenar los valores de humedad cada sensor por grupos de sendores
            if (valores_num.indexOf(cad) > -1 && correcto == true) {
                switch (contax) {
                    case 1:
                        vsensor1 += cad;
                        break;
                    case 2:
                        vsensor2 += cad;
                        break;
                    case 3:
                        vsensor3 += cad;
                        break;
                    case 4:
                        vsensor4 += cad;
                        break;
                    case 5:
                        val_ref += cad;
                        break;
                    case 6:
                        val_sta += cad;
                        break;
                    case 7:
                        val_dn += cad;
                        break;
                }
            }
            if (cad.equals("-") && contax == 8 && correcto == true) {
                llenaVector();
                //Vaciando los valores actuales de las variables para recibir los nuevos
                contax = 0;
                vsensor1 = "";
                vsensor2 = "";
                vsensor3 = "";
                vsensor4 = "";
                val_ref = "";
                val_sta = "";
                val_dn = "";
                if (!terminado()) {
                    System.out.println("NO se han Terinado de llenar los Grupos");
                }
            }
    }
    public void llenaVector() {//Asigna los valors a GrupoSensores
        objgrupo.setVsensor1(vsensor1);
        objgrupo.setVsensor2(vsensor2);
        objgrupo.setVsensor3(vsensor3);
        objgrupo.setVsensor4(vsensor4);
        objgrupo.setVal_ref(val_ref);
        objgrupo.setVal_sta(val_sta);
        objgrupo.setVal_dn(val_dn);
        sensores.add(objgrupo);
        System.out.println("El Gruopo: " + objgrupo.getGrupo() + " se ha llenado");
    }

    public boolean terminado() {//metodo que sirve para comprobar si se han insertado los 4 objetos en el ArrayList
        boolean ter = false;
        if (!sensores.isEmpty()) {
            if (sensores.size() > 3) {
                System.out.println("Se han llenado los "+sensores.size()+" grupos");
                imprimeDatos();
                sensores.clear();
                ter = true;
            }
        } else {
            ter = false;
        }
        return ter;
    }

    public void imprimeDatos() {
        for (GrupoSensores tmp : sensores) {
            System.out.print(tmp.getGrupo() + ","
                    + tmp.getVsensor1() + ","
                    + tmp.getVsensor2() + ","
                    + tmp.getVsensor3() + ","
                    + tmp.getVsensor4() + ","
                    +tmp.getVal_ref()+","
                    + tmp.getVal_sta() + ","
                    + tmp.getVal_dn() + "\n");
        }
    }
}
